package com.yuxinyang.memory.admin.common;

import org.springframework.web.context.request.async.DeferredResult;

/**
 * DeferredResult处理程序
 *
 * @author Administrator 余秀良
 * @version 1.0
 * <p>date: 2019年09月03日  09:55 </p>
 * <p>address: 四川成都 </p>
 */
public interface DeferredResultHandler<V> {
    /**
     * 延迟返回
     *
     * @param key           requestId
     * @param timeout       超时时间
     * @param timeoutResult 超时返回对象
     * @return DeferredResult<DeferredData>
     */
    DeferredResult<V> deferredResult(String key, long timeout, Object timeoutResult);

    /**
     * 绑定请求
     *
     * @param key            requestId
     * @param deferredResult 返回的结果
     */
    void add(String key, DeferredResult<V> deferredResult);

    /**
     * 根据请求id获取结果
     *
     * @param key requestId
     * @return 返回的结果
     */
    DeferredResult<V> get(String key);

    /**
     * 移除请求id相关的数据
     *
     * @param key requestId
     */
    void remove(String key);

    /**
     * 处理数据
     *
     * @param responseProtocol DeferredData对象
     */
    void handleDeferredData(V responseProtocol);
}
